<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
</head>
<body>

</body>
<script>
	// * 怎么生成一个基本包装类型的包装对象呢?
	{
		// var str = "abcdefg";
		// console.log(str);// abcdefg
		// console.log(typeof str);// string
		
		// 1- 生成字符类型的包装对象
		// var str = new String("abcdefg");
		// console.log(str);// String{'abcdefg'}
		// console.log(typeof str);// object
		// console.log(str[0]);
		// console.log(str["1"]);
		
		// 2-根据接收的类型决定生成怎样的包装对象
		// var str = new Object("abcdefg");
		// console.log(str);// String{'abcdefg'}
		// console.log(typeof str);// object
		
		// var num = new Object(1);
		// console.log(num);
		
	}
	// * 基本包装类型不是对象，为什么会有属性呢?
	// 答：程序在执行时会转为包装对象，然后调用包装对象下的属性或方法。执行完毕后清空。
	{
		// 基本包装类型拥有包装对象。
		// const str = "abcdefg";
		// console.log(str);// abcdefg
		// console.log(str.length);// 7
		// console.log(str.slice(2));// cdefg
		
		// 比如以下语句：
		// var str = "abcdefg";
		// console.log(str.length);
		// 相当于：
		// var str = "abcdefg";
		// var _str = new String(str);
		// console.log(_str.length);
		// _str=null;// 清空
	}
	
	// * 引用类型和基本包装类型的区别？
	{
		// 1- 生命周期不同:相对于引用类型的生命周期而言，包装类型是短暂的。
		{
			// const obj = {};
			// obj.a = 1;
			// obj.b = 2;
			// console.log(obj.a)
			
			// const str = 'abc';
			// console.log(str.length);// var _str = new String(str);console.log(_str); _str=null
		}
		// 2- 基本包装类型无法直接增加属性或方法
		{
			// var userName = "zhangsan";
			// userName.a = 1;
			// console.log(userName.a);
			
			// 相当于：
			// var userName = "zhangsan";
			// var _userName = new String(userName);
			// _userName.a = 1;
			// _userName = null;
			// var _userName = new String(userName);
			// console.log(_userName.a);// undefined
			
		}
	}
	// * 如何给基本类型添加方法或者属性呢？
	{
		// String.prototype.last = function(){
		// 	return this.slice(this.length-1);
		// }
		// var userName = "zhangsan";
		// console.log(userName.last());
		// 相当于：
		// var userName = "zhangsan";
		// var _userName = new String(userName);
		// console.log(_userName);
		// console.log(_userName.last());
		// _userName = null;
		
	}
</script>
</html>